2023/12/232100字符

迭代器

什么是迭代器?

  • 一种设计模式,用于统一迭代过程,并规范了迭代的规格
  • 得到下一个数据
  • 判断是否还有后续数据

迭代器模拟

const arr = [1, 2, 3, 4, 5];
const iterator = {
    i: 0,
    // next() 用于得到下一个数据
    next () {
        let result = {
            value: arr[this.i],  // value: 下一个数据的值
            done: this.i >= arr.length  // done: Boolean 是否迭代完成
        }
        this.i++;
        return result;
    }
}

迭代器函数

function createIterator (arr) {
    let i = 0;
    return {
        next () {
            let result = {
                value: arr[i],
                done: i >= arr.length
            }
            i++;
            return result;
        }
    }
}
const arr = [1, 2, 3, 4, 5];
let iter = createIterator(arr);
iter.next();  //--> {value: 1, done: false}
iter.next();  //--> {value: 2, done: false}
iter.next();  //--> {value: 3, done: false}
iter.next();  //--> {value: 4, done: false}
iter.next();  //--> {value: 5, done: false}
iter.next();  //--> {value: undefined, done: false}

斐波纳列数列

function createFeiboIterator () {
    let prev1 = 1,  // 当前位置的前一位
        prev2 = 1,  // 当前位置的前二位
        n = 1;  // 当前是第几位
    return {
        next () {
            let value;
            if (n <= 2) {
                value = 1;
            } else {
                value = prev2 + prev1;
            }
            const result = {
                value,
                done: false
            }
            prev2 = prev1;
            prev1 = result.value;
            n++;
            return result;
        }
    }
}
let iter = createFeiboIterator();
iter.next();  //--> {value: 1, done: false}
iter.next();  //--> {value: 1, done: false}
iter.next();  //--> {value: 2, done: false}
iter.next();  //--> {value: 3, done: false}
iter.next();  //--> {value: 5, done: false}